// information.js - 系统信息采集

/**
 * 获取并显示系统和Node.js环境信息
 */

console.log('=== Node.js 系统信息报告 ===\n');

// 1. CPU架构信息
const os = require('os');
console.log('🖥️  CPU 架构信息:');
console.log(`   架构: ${os.arch()}`);
console.log(`   CPU数量: ${os.cpus().length} 核`);
console.log(`   CPU型号: ${os.cpus()[0].model}`);
console.log(`   CPU主频: ${os.cpus()[0].speed} MHz`);

// 显示所有CPU详细信息（可选）
console.log('\n   CPU详细信息:');
os.cpus().forEach((cpu, index) => {
    console.log(`     CPU ${index + 1}: ${cpu.model} @ ${cpu.speed}MHz`);
});

// 2. 操作系统信息
console.log('\n📋 操作系统信息:');
console.log(`   平台: ${os.platform()} (${process.platform})`);
console.log(`   操作系统: ${os.type()}`);
console.log(`   版本: ${os.release()}`);
console.log(`   主机名: ${os.hostname()}`);
console.log(`   系统空闲时间: ${(os.uptime() / 3600).toFixed(2)} 小时`);

// 3. 进程ID信息
console.log('\n🆔 进程信息:');
console.log(`   当前进程ID: ${process.pid}`);
console.log(`   父进程ID: ${process.ppid || '无'}`);
console.log(`   Node.js版本: ${process.version}`);
console.log(`   V8引擎版本: ${process.versions.v8}`);

// 4. Node.js可执行文件路径
console.log('\n📁 Node.js运行环境:');
console.log(`   可执行文件路径: ${process.execPath}`);
console.log(`   工作目录: ${process.cwd()}`);
console.log(`   Node.js安装路径: ${process.installPrefix || '未知'}`);

// 5. 内存使用情况
console.log('\n🧠 内存使用情况:');

// Node.js内存使用
const nodeMemory = process.memoryUsage();
console.log('   Node.js内存使用:');
console.log(`     RSS (常驻内存): ${(nodeMemory.rss / 1024 / 1024).toFixed(2)} MB`);
console.log(`     堆内存总大小: ${(nodeMemory.heapTotal / 1024 / 1024).toFixed(2)} MB`);
console.log(`     堆内存使用量: ${(nodeMemory.heapUsed / 1024 / 1024).toFixed(2)} MB`);
console.log(`     外部内存: ${(nodeMemory.external / 1024 / 1024).toFixed(2)} MB`);
console.log(`     数组缓冲区内存: ${(nodeMemory.arrayBuffers / 1024 / 1024).toFixed(2)} MB`);

// 系统总内存
const totalMemory = os.totalmem();
const freeMemory = os.freemem();
const usedMemory = totalMemory - freeMemory;

console.log('\n   系统内存:');
console.log(`     总内存: ${(totalMemory / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`     可用内存: ${(freeMemory / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`     已用内存: ${(usedMemory / 1024 / 1024 / 1024).toFixed(2)} GB`);
console.log(`     内存使用率: ${((usedMemory / totalMemory) * 100).toFixed(2)}%`);

// 6. 环境变量信息（可选）
console.log('\n⚙️  环境信息:');
console.log(`   NODE_ENV: ${process.env.NODE_ENV || '未设置'}`);
console.log(`   用户目录: ${os.homedir()}`);
console.log(`   临时目录: ${os.tmpdir()}`);

// 7. 网络接口信息（可选）
console.log('\n🌐 网络接口:');
const interfaces = os.networkInterfaces();
Object.keys(interfaces).forEach(ifaceName => {
    console.log(`   ${ifaceName}:`);
    interfaces[ifaceName].forEach(iface => {
        if (iface.family === 'IPv4') {
            console.log(`     IPv4: ${iface.address} (${iface.internal ? '内网' : '外网'})`);
        }
    });
});

// 8. 性能建议
console.log('\n💡 性能提示:');
const heapUsedPercent = (nodeMemory.heapUsed / nodeMemory.heapTotal) * 100;
if (heapUsedPercent > 80) {
    console.log('   ⚠️  堆内存使用率较高，注意内存泄漏风险');
} else {
    console.log('   ✅ 堆内存使用正常');
}

const rssLimit = 1.7 * 1024 * 1024 * 1024; // 1.7GB (32位限制)
if (nodeMemory.rss > rssLimit) {
    console.log('   ⚠️  RSS内存接近限制，考虑优化或升级到64位系统');
}

console.log('\n=== 信息采集完成 ===');